package Day019_Junit单元测试_NIO.demo3_Buffer类_缓冲区;

import java.nio.ByteBuffer;
import java.util.Arrays;

/**
 * @author zhangyan
 * @date 2020/5/12 11:19
 */
public class Test7_标记mark {
    public static void main(String[] args) {
        /*
        标记mark是指：当调用缓冲区的reset()方法时，会将缓冲区的position位置重置为该索引。不能为0，不能大于position

        相关方法：
                public Buffer mark()： 设置此缓冲区的标记为当前的position位置
                public Buffer reset(); 充值为以前的标记
         */

        //创建ByteBuffer缓冲数组 容量为10
        ByteBuffer bb = ByteBuffer.allocate(10);

        //添加元素
        bb.put((byte) 1);
        bb.put((byte) 2);
        bb.put((byte) 3);
        //标记
        bb.mark(); //记录当前position位置的索引 3
        //添加数据
        bb.put((byte) 4);
        bb.put((byte) 5);

        System.out.println("容量:" + bb.capacity() + "限制:" + bb.limit() + "位置:" + bb.position());
        //容量:10限制:10位置:5

        //重置position为标记时候的位置
        bb.reset();
        System.out.println("容量:" + bb.capacity() + "限制:" + bb.limit() + "位置:" + bb.position());
        //容量:10限制:10位置:3

        //添加数据
        bb.put((byte) 6);
        System.out.println(Arrays.toString(bb.array()));
        //[1, 2, 3, 6, 5, 0, 0, 0, 0, 0]  3索引位置添加6 覆盖以前的4
    }
}
